package com.hsj.demo.service;

import com.hsj.demo.dao.UserDao;
import com.hsj.demo.entity.User;
import com.hsj.demo.utils.ConstUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import java.io.File;
import java.io.IOException;
import java.util.Date;
import java.util.List;

@Service
public class UserService extends CurdService<UserDao, User> {
    @Autowired
    private UserDao userDao;

    public List<User> findAuditUser(){
        return userDao.findAuditUser();
    }

    public User findByUsername(String username){
        return userDao.findByUsername(username);
    }

    public User findByLoginMessage(User user){
        return userDao.findByLoginMessage(user);
    }

    public User editProfile(MultipartFile file, User newUser,User oldUser){
        // 防止数据在客户端被人恶意修改，在服务端设置Id
        newUser.setId(oldUser.getId());newUser.setRole(null);
        // 判断是否修改学校信息
        if(!newUser.getSchool().equals(oldUser.getSchool()) || !newUser.getFaculty().equals(oldUser.getFaculty()) ||
            !newUser.getUserClass().equals(oldUser.getUserClass())){
            newUser.setIsPass('0');
        }

        // 先设定一个放置上传文件的文件夹(该文件夹可以不存在，下面会判断创建)
        String deposeFilesDir = ConstUtil.getConstUtil().getPhotoUrl();
        if(file!=null){
            // 获取附件原名(有的浏览器如chrome获取到的是最基本的含 后缀的文件名,如myImage.png)
            // 获取附件原名(有的浏览器如ie获取到的是含整个路径的含后缀的文件名，如C:\\Users\\images\\myImage.png)
            String fileName = file.getOriginalFilename();
            // 如果是获取的含有路径的文件名，那么截取掉多余的，只剩下文件名和后缀名
            int index = fileName.lastIndexOf("\\");
            if (index > 0) {
                fileName = fileName.substring(index + 1);
            }

            // split()中放正则表达式; 转义字符"\\."代表 "."
            String[] fileNameSplitArray = fileName.split("\\.");
            // 加上random戳,防止附件重名覆盖原文件
            fileName = ConstUtil.getConstUtil().getProfilePhotoUrl() + oldUser.getUsername() + "." + fileNameSplitArray[1];

            // 根据文件的全路径名字(含路径、后缀),new一个File对象dest
            File dest = new File(deposeFilesDir + fileName);
            // 如果该文件的上级文件夹不存在，则创建该文件的上级文件夹及其祖辈级文件夹;
            if (!dest.getParentFile().exists()) {
                dest.getParentFile().mkdirs();
            }
            try {
                // 将获取到的附件file,transferTo写入到指定的位置(即:创建dest时，指定的路径)
                file.transferTo(dest);
            }catch (IOException e) {
                e.printStackTrace();
            }
            newUser.setProfilePhoto(fileName);
        }
        userDao.update(newUser);
        return userDao.findById(newUser.getId());
    }

    public String updatePassword(String oldPassword,String newPassword,User user) {
        if(oldPassword.equals(user.getPassword())){
            user.setPassword(newPassword);
            userDao.update(user);
            return "修改成功";
        }else{
            return "密码错误";
        }
    }

    public List<User> findByRole(User user){
        return userDao.findByRole(user);
    }

    public String register(User user){
        if(userDao.findByUsername(user.getUsername())!=null){
            return "用户已存在，请重新注册";
        }
        user.setSex('男');user.setNickname(user.getUsername());
        user.setProfilePhoto("..\\assets\\img\\users\\1.jpg");
        user.setIntroduce("大家好，我是"+user.getUsername());
        user.setSchool("");
        user.setFaculty("");
        user.setUserClass("");
        user.setRole(0);
        user.setIsPass('0');
        user.setSealTime(new Date());
        userDao.insert(user);
        return "注册成功,初始默认都为学生";
    }
}
